//
//  PinPadManager.h
//  MPOSDemoProject
//
//  Created by lfy on 2018/6/7.
//  Copyright © 2018年 develop. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "MPBlueToothCallback.h"
#import "MPPinPadModel.h"

@interface PinPadManager : NSObject

/**
 更新终端主密钥,更新结果通过

 @param keyIndex 主密钥索引，取值范围0-9
 @param data 密钥数据 16位或24位
 @param listener 密钥更新回调接口
 */
+ (void)updateMasterKey:(int)keyIndex data:(NSData*)data handle:(OnPinPadUpdateListener)listener;

/**
 更新终端 工作 密钥，执行成功后回调

 @param keyIndex 工作密钥索引
 @param data 工作密钥
 @param listener 密钥更新回调接口
 */
+ (void)updateWorkingKey:(int)keyIndex keyList:(NSArray<MPWorkingKeyModel *>*)data handle:(OnPinPadUpdateListener)listener;

/**
 更新终端密文主密钥,更新结果通过

 @param keyIndex 主密钥索引，取值范围0-9
 @param DesCryptkeyIndex 主密钥索引，取值范围0-9
 @param data 密钥数据
 @param checkValue 核验值，采用3des，明文密钥对8个0加密，取前4字节
 @param listener 密钥更新回调接口
 */
+ (void)updateWorkingKey:(int)keyIndex desCriyptIndex:(int)DesCryptkeyIndex data:(NSData*)data checkValue:(NSData*)checkValue handle:(OnPinPadUpdateListener)listener;


/**
 工作密钥加解密，执行成功后回调

 @param encryptionModel 工作密钥加解密信息类
 @param success 成功回调
 @param fail 失败回调
 */
+ (void)desByWKey:(MPEncryptionModel*)encryptionModel success:(OnEncryptionSuccessListener)success fail:(OnEncryptionFailListener)fail;


/**
 计算mac

 @param keyIndex 密钥索引 0-9
 @param macType mac类型，取值参考
 @param data 待计算的数据
 @param success  mac计算结果成功回调接口
 @param fail mac计算失败回调结果
 */
+ (void)calculateMAC:(int)keyIndex macType:(MacTypeEnum)macType data:(NSData*)data success:(OnCalculatMACSuccessListener)success fail:(OnCalculatMACFailListener)fail;


/**
 输入pin接口，输入成功后通过

 @param keyIndex 密钥索引0-9
 @param timeout 输pin超时时间,单位秒，范围0-60s
 @param cardNum 主账号，用于加密pin
 @param success 成功回调接口
 @param fail 失败回调接口
 */
+ (void)inputPin:(int)keyIndex timeout:(int)timeout cardNum:(NSString*)cardNum success:(OnInputPinSuccessListener)success fail:(OnInputPinFailListener)fail;


/**
 获取设备TID，针对银联21号文

 @param ksn 加密随机因子
 @param listener 回调
 * 21号文结果回调接口
 * data，内容为59域A2子域内容，格式为TLV，
 * 其中格式如下：
 * 设备类型  TAG 01  长度2字节 01 ：ATM 02 ：传统 POS 03 ：MPOS 04 ：智能 POS 05：II 型固定电 话 POS
 * 终端硬件序列号 TAG 02 长度变长最大50字节  6位厂商编号+2位终端类型+42位自定义序列号
 * 加密随机因子  TAG 03 长度变长最大10个字节
 * 硬件序列号 TAG 04 长度8字节
 * 应用程序版本号 TAG 05 长度8字节 长度不足时右补空格
 */
+ (void)getDeviceTwentyOneInfo:(NSString*)ksn handler:(OnGetDeviceKSNListener)listener;


/**
 根据ISO9564规范，PINBLOCK有五种格式。

 @param mode mode,格式，取值0~4
 @param listener listener,结果回调
 */
+ (void)setPinBlockFormat:(int)mode handle:(OnOperateListener)listener;

@end
